package com.egao.common.module.student.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.egao.common.core.web.PageParam;
import com.egao.common.module.student.entity.StudentSign;
import com.egao.common.module.student.entity.print.AgilePrintVO;
import com.egao.common.module.student.entity.print.DealPrintVO;
import com.egao.common.module.student.entity.print.FreePrintVO;
import com.egao.common.module.student.entity.print.VenturePrintVO;
import com.egao.common.module.student.entity.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 学生签约毕业去向mapper
 * @author lym
 */
public interface StudentSignMapper extends BaseMapper<StudentSign> {

    /**
     * 查询分页学生签约列表
     * 信息有效性升序 邀请签约时间倒序
     * @param page 参数对象
     * @return List<StudentSignListVO>
     */
    List<StudentSignListVO> listPage(@Param("page") PageParam<StudentSign> page);

    /**
     * 查询单个表单对象
     * @param studentSign 学生毕业去向对象
     * @return StudentSign
     */
    StudentSign getForm(StudentSign studentSign);

    /**
     * 查询学生毕业去向管理端列表
     * 学院、校使用管理列表
     * @param page PageParam<StudentSign>
     * @return List<StudentSignAdminListVO>
     */
    List<StudentSignAdminListVO> listAdminPage(@Param("page") PageParam<StudentSignAdminListVO> page);

    /**
     * 查询学生邀约、解约记录
     * @param page PageParam<StudentSign>
     * @return List<StudentSignAdminListVO>
     */
    List<StudentSignAdminListVO> listAdminSignPage(@Param("page") PageParam<StudentSignAdminListVO> page);

    /**
     * listAdminPage 导出excel
     * @param page PageParam<StudentSignAdminListVO>
     * @return List<StudentSignExcelVO>
     */
    List<StudentSignExcelVO> listAdminExcelList(@Param("page") PageParam<StudentSignAdminListVO> page);

    /**
     * listAdminSignPage 导出excel
     * @param page PageParam<StudentSignAdminListVO>
     * @return List<StudentSignExcelVO>
     */
    List<StudentSignExcelVO> listAdminSignExcelList(@Param("page") PageParam<StudentSignAdminListVO> page);

    /**
     * 管理 查询毕业去向人数
     * @param map
     * @return
     */
    Integer countAdmin(@Param("map") Map<String, Object> map);

    /**
     * 查询学生签约列表单位管理端
     * @param page
     * @return
     */
    List<StudentSignCompanyListVO> listCompanyPage(@Param("page") PageParam<StudentSignCompanyListVO> page);

    /**
     * 查询协议就业打印表
     * @param dealPrintVO DealPrintVO
     * @return DealPrintVO
     */
    DealPrintVO dealPrint(DealPrintVO dealPrintVO);

    /**
     * 查询灵活就业打印表
     * @param agilePrintVO AgilePrintVO
     * @return AgilePrintVO
     */
    AgilePrintVO agilePrint(AgilePrintVO agilePrintVO);

    /**
     * 查询自由职业打印表
     * @param freePrintVO FreePrintVO
     * @return FreePrintVO
     */
    FreePrintVO freePrint(FreePrintVO freePrintVO);

    /**
     * 查询自主创业打印表
     * @param venturePrintVO VenturePrintVO
     * @return VenturePrintVO
     */
    VenturePrintVO venturePrint(VenturePrintVO venturePrintVO);

    /**
     * 查询学生签约状态数据
     * @param studentSignStatistics StudentSignStatistics
     * @return List<StudentSign>
     */
    List<StudentSign> listStatistics(@Param("studentSignStatistics") StudentSignStatistics studentSignStatistics);

    /**
     * 查询home界面所需要的签约信息
     * @param studentSignHomeVO
     * @return
     */
    List<StudentSignHomeVO> listHome(@Param("studentSignHomeVO") StudentSignHomeVO studentSignHomeVO);

    /**
     * 2022年已完成的毕业生登记信息
     * 用户给奥兰同步使用
     * @param studentSign
     * @return
     */
    List<StudentSign> listAll(StudentSign studentSign);

    /**
     * 查询签约记录
     * @param page
     * @return
     */
    List<StudentSignRecordVO> listSignRecord(@Param("page") PageParam<StudentSignRecordVO> page);

    /**
     * 查询校友使用签约数据
     * 只含协议就业
     * @param page
     * @return
     */
    List<StudentSignAlumniVO> listAlumniPage(@Param("page") PageParam<StudentSign> page);

    /**
     * 查询学院学生有效签约(登记)个数
     * 不算定向生
     * @param yearId
     * @return
     */
    List<StudentSignStatisticsCollegeVO> collegeStudentSignCount(@Param("yearId") Integer yearId, @Param("xl") String xl, @Param("tks") String tks, @Param("date1") String date1, @Param("date2") String date2);

    /**
     * 查询专业学生有效签约(登记)个数
     * 不算定向生
     * @param yearId
     * @param xl
     * @return
     */
    List<StudentSignStatisticsCollegeVO> majorStudentSignCount(@Param("yearId") Integer yearId, @Param("xl") String xl);

    /**
     * 查询各个民族学生有效签约(登记)个数
     * 排除汉族
     * @param yearId 毕业年份
     * @param xl 学历
     * @param tks 特困生
     * @return
     */
    List<StudentSignStatisticsCollegeVO> mzStudentSignCount(@Param("yearId") Integer yearId, @Param("xl") String xl, @Param("tks") String tks);

    /**
     * 查询个类型签约登记人数
     * @param yearId
     * @return
     */
    StudentSignStatisticsCollegeVO signCount(@Param("yearId") Integer yearId);

    /**
     * 查询已确认毕业去向学院及学院人数
     * @param yearId 毕业年份ID
     * @return List<StudentSignConfirmVO>
     */
    List<StudentSignConfirmVO> studentSignConfirmList(@Param("yearId") Integer yearId);

    List<StudentSign> tempList();

    /**
     * 毕业去向大屏数据源
     * @param year 学生毕业年份
     * @return List<StudentSign>
     */
    List<StudentSign> listBigData(@Param("year") Integer year);
}
